/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ngc;

import edu.ucue.ptc.gco.util.DireccionValidadorException;
import edu.ucue.ptc.gco.dao.DireccionDAOLocal;
import edu.ucue.ptc.gco.mdl.Direccion;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import edu.ucue.ptc.gco.util.NoExisteObjetoException;
import edu.ucue.ptc.gco.util.ValidarAtributoUtil;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.inject.Inject;

/**
 *
 * @author DELL
 */
@Stateful
public class DireccionManager implements DireccionManagerLocal {
       
    @Inject
    private DireccionDAOLocal direccionDao;

    @EJB
    private UsuarioManagerLocal ejbRefUsuario;

    @Override
    public Direccion crear(Direccion direccion,String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException, DireccionValidadorException
    {        
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        try
        {            
            ValidarAtributoUtil.validarStringNuloVacio("calle principal", direccion.getCallePrincipal());
            ValidarAtributoUtil.validarObjetoNulo("ciudad", direccion.getCiudad());
           List<Direccion> d=direccionDao.verificarDireccion(direccion.getIdDireccion());
            if (d==null || d.isEmpty()){
                
                    direccionDao.crear(direccion);
                    return direccion;
            }
            else
            {
                throw new AtributoInvalidoException("Direccion ",direccion.getIdDireccion(),"La direccion ya existe");
            }
            
        }
        catch(AtributoInvalidoException aie)
        {                              
            throw new DireccionValidadorException(aie);                        
        }
        catch(Exception e)
        {                              
            throw new DireccionValidadorException("No se pudo guardar direccion, revise los parametros");                        
        }
        
    }

    @Override
    public Direccion actualizar(Direccion direccion, String nombreUsuario, String contrasenaUsuario) throws DireccionValidadorException, AtributoInvalidoException{        
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        try
        {   
            ValidarAtributoUtil.validarObjetoNulo("direccion", direccion);
            ValidarAtributoUtil.validarStringNuloVacio("calle principal", direccion.getCallePrincipal());
            ValidarAtributoUtil.validarObjetoNulo("ciudad", direccion.getCiudad());
//            List<Direccion> d=direccionDao.verificarDireccion(direccion.getIdDireccion());
//            if (d==null || d.isEmpty()){
//                    
//                throw new AtributoInvalidoException("Direccion ",direccion.getIdDireccion(),"La direccion esta vacia");
//                    
//            }
//            else
//            {
                direccionDao.actualizar(direccion);
                return direccion;
//            }
            
        }
        catch(AtributoInvalidoException aie)
        {                              
            throw new DireccionValidadorException("No se pudo actualizar la Direccion");                        
        }
        catch(Exception e)
        {                              
            throw new DireccionValidadorException("No se pudo guardar direccion, revise los parametros");                        
        }
    }

    @Override
    public boolean eliminar(Direccion direccion, String nombreUsuario, String contrasenaUsuario) throws DireccionValidadorException, AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        try
        {
            direccionDao.eliminar(direccion);
            return true;
        }
        catch(Exception ex)
        {                              
            throw new DireccionValidadorException("No se pudo eliminar la Direccion");                       
        }
    }

    @Override
    public boolean eliminarc(String idDireccion, String nombreUsuario, String contrasenaUsuario) throws DireccionValidadorException, AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);        
        try
        {
            direccionDao.eliminarc(idDireccion);
            return true;
        }
        catch(Exception ex)
        {                              
            throw new DireccionValidadorException("No se pudo eliminar la Direccion");                       
        }
    }
//
//        @Override
//        public boolean eliminarc(Long idDireccion) throws DireccionValidadorException{
//            try
//            {
//                direccionDao.eliminarc(idDireccion);
//                return true;
//            }
//            catch(Exception ex)
//            {                              
//                throw new DireccionValidadorException("No se pudo eliminar la Direccion");                       
//            }
//        }

    @Override
    public List<Direccion> listarTodos(String nombreUsuario, String contrasenaUsuario) throws DireccionValidadorException, AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);                        
         try
        {
        return direccionDao.listarTodos();
        }
        catch(Exception ex)
        {                              
            throw new DireccionValidadorException("No se pudo listar la Direccion");                       
        }
    }

    @Override
    public Direccion obtenerPorId(String idDireccion, String nombreUsuario, String contrasenaUsuario) throws DireccionValidadorException, AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);                                  
        try{
            return direccionDao.obtenerPorId(idDireccion);
        }
        catch(Exception ex)
        {                              
            throw new DireccionValidadorException("No se pudo obtener la Direccion");                       
        }
    }    
    
    @Override
    public List<Direccion> ListarDireccionPorCliente(int id, String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);                                          
        return direccionDao.ListarDireccionPorCliente(id);
    }
    
    @Override
    public String eliminarDireccion(Direccion direccion,String usuario, String password) throws NoExisteObjetoException, AtributoInvalidoException, DireccionValidadorException{
        ejbRefUsuario.existeUsuario(usuario, password);
        Direccion emp=obtenerPorId(String.valueOf(direccion.getIdDireccion()), usuario, password);
        if (emp!=null){
            direccionDao.eliminarDireccion(direccion);
            return "ok";}
        else
        {
            throw new NoExisteObjetoException("No existe el empleado indicado");            
        }
    }
}
